package com.tlx.image;

import java.io.File;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;

import com.tlx.core.util.RandomUtils;
import com.tlx.core.util.TFileUtils;

public class ImageResizeUtils {

    // 统一一个目录下的全部图片到相同宽度
    public static void tongyiWidthByDirIncludeSon(String dirPath) {

        // 先处理当前目录下图片
        tongyiWidthByDir(dirPath);

        // 再递归
        List<String> dirList = TFileUtils.getDirList(dirPath);
        for (String sonPath : dirList) {
            tongyiWidthByDirIncludeSon(sonPath);
        }
    }

    // 合并一个目录下的图片，不包括子目录
    public static void tongyiWidthByDir(String dir) {

        List<String> fileList = TFileUtils.getImageList(dir);

        if (CollectionUtils.isEmpty(fileList)) {
            return;
        }

        tongyiWidth(fileList);
    }

    // 将一组图片都缩放到一样的宽度，高度根据比例调整，以最大图片宽度为主
    public static void tongyiWidth(List<String> imgPathList) {
        int maxWidth = 0;
        boolean isAllSame = true;// 是否图片尺寸完全相同
        for (String imgPath : imgPathList) {
            int w = ImageBaseUtils.getImgInfo(imgPath)[0];
            if (maxWidth != 0 && w != maxWidth && isAllSame) {
                isAllSame = false;
            }
            maxWidth = maxWidth > w ? maxWidth : w;

        }

        if (!isAllSame) {
            for (String imgPath : imgPathList) {
                resizeWidthSelf(imgPath, maxWidth);
            }
        }
    }

    // 按宽度缩放，高度等比
    public static String resizeWidthNew(String imgPath, String destPath, int width) {
        if (StringUtils.isBlank(destPath)) {
            destPath = RandomUtils.randomName("resize", imgPath);
        }

        int srcWidth = ImageBaseUtils.getImgInfo(imgPath)[0];

        if (srcWidth == width) {
            // 不是同一个文件，复制
            if (!StringUtils.equals(imgPath, destPath)) {
                try {
                    FileUtils.copyFile(new File(imgPath), new File(destPath));
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
            // 相同不复制
        } else {
            ImageBaseUtils.resize(imgPath, destPath, width, null);
        }

        return destPath;

    }

    // 按宽度缩放，高度等比，直接修改源文件
    public static void resizeWidthSelf(String imgPath, int width) {
        resizeWidthNew(imgPath, imgPath, width);
    }
}
